home *** CD-ROM | disk | FTP | other *** search
/ Aminet 26 / Aminet 26 (1998)(GTI - Schatztruhe)[!][Aug 1998].iso / XiPaint / Developer / Modules / xiUser.h < prev   
C/C++ Source or Header  |  1995-09-09  |  20KB  |  433 lines

  1. /* Last Change: Thomas /   6. August 1995  08:46:49 */
  2. /****  Header zu UserHandle.c  ****/
  3.  
  4. /****  Strukturen und Defines zu User-Messages  ****/
  5.  
  6. /* //////////////     B E G I N N     öffentliches XiUser.h      ////////////// */
  7.  
  8. /**  User-Message-Struktur  **/
  9.  
  10. /* Sie muß vom User an den xiuser.port gesendet werden. Da die Messages mit Reply behandelt
  11.    werden, muß der Reply-Port in der ExecMess ausgefüllt werden.
  12.    Je nach bestellter Aktion sind die benötigten Parameter-Felder auszufüllen.
  13.    War die Aktion erfolgreich, so ist Success auf TRUE, und die Rückgabe-Werte sind in den
  14.    entsprechenden Feldern eingetragen. Warten auf das Reply ist daher immer nötig, da XiPaint
  15.    nicht immer sofort auf ein Kommando reagieren kann. Genaueres zu den Kommandos siehe bei den
  16.    Defines.
  17.  
  18.    Struct for sending to the xiuser.port. Please check Success;
  19.    if the command was Successfull, it returns TRUE, else FALSE.
  20.    You have to wait for the reply - because this is a synchronious
  21.    port!
  22.  
  23.    The memory within XiPaint is 32-Bit-wide: RGBA RGBA ....
  24. */
  25.  
  26. struct XiMessage {
  27.         struct Message ExecMess;        /* Exec-Message-Struktur */
  28.         ULONG Label;                    /* Erkennungsmarke, muß 0x12345678 sein */
  29.         UWORD Command;                  /* gewünschtes Kommando, siehe Defines */
  30.         BOOL Success;                   /* bei Reply: Kommando war erfolgreich, wenn TRUE */
  31.         char *ProjectName;              /* Name des zu bearbeitenden Projekts */
  32.         SHORT Width, Height;            /* Größe des Projekts */
  33.         UBYTE *Memory;                  /* Zeiger auf Speicher, 4 Byte/Pixel mit RGBA */
  34.         char **ProjectList;             /* Zeiger auf Liste der Projekt-Namen, bei XI_GET_PROJECT_LIST */
  35.         SHORT ProjectCount;             /* Anzahl der Projekte */
  36.       };
  37.  
  38.  
  39. #define KENNUNG "XIPAINT-EXTERNAL000"
  40. struct xi_ext_header{
  41.   char key[20];             // XIPAINT-EXTERNAL000
  42.   WORD version, revision;   // From XiPaint
  43.   char what;                // L=Loader, S=Saver, F=Filter
  44.   char format[20];          // Which format
  45.   char author[40];          // Name and Copyright from Author
  46.   WORD dver, drev;          // Version of this driver
  47.   char f24,f16,f8,f4,f2,f1; // supported depths (0/1) (saver!)
  48.   char alpha,clut,cmap;     // 0/1
  49.   };
  50.  
  51.  
  52. struct io_pic{
  53.   struct io_pic *next;    // For internal chaining
  54.   UWORD picw, pich;       // Real Picdimension
  55.   UWORD memw, memh;       // Memory-Dimension (for loading)
  56.   char *memory;           // Memory to save from
  57.   char name[128];         // Full name with path for saver
  58.   char param[128];        // Special parameter from user
  59.   char port[30];          // Name of the XiPaint - Port
  60.   UWORD xdpi, ydpi;       // DPI-Chunk
  61.   char depth;             // 1,2,4,8,16,24
  62.   char jpegf;             // Jpeg loss factor
  63.   char jpegs;             // Jpeg smooth 0/1
  64.   char *clut;             // Pointer to a clut (clutf-entries)
  65.   struct xi_ext_header ext; //
  66.   /*                       Nur für dieses Modul ... */
  67.   char proname[80];       // Projektname
  68.   WORD brushnr;           // Brushnummer
  69.   char todo;              // Brush/Project,Load/pAlette
  70.   char minipic;           // 0/1
  71.   };
  72.  
  73. /**  mögliche Kommandos  **/
  74.  
  75. /* Achtung: Kommando war nur erfolgreich, wenn bei Reply Success auf TRUE ist !!! */
  76.  
  77. #define  XI_GET_PROJECT_LIST    1
  78.  
  79. /*      Aktion:         gibt Liste mit Namen aller offenen Projekte zurück
  80.                         Gives a list of all available XiPaint Projects
  81.         Parameter:      keine
  82.                         none
  83.  
  84.         Return:         ProjectList:    Zeiger auf Array von Projekt-Namen (nach XiPaint-Konvention)
  85.                                         Pointer to an array of Project-Names
  86.                         ProjectCount:   Anzahl der Projekte
  87.                                         Count of Projects
  88.  
  89.                 Achtung: Listen-Speicher muß vom User mit "FreeVec(ProjectList)" freigegeben werden !!!
  90.                 Attention: You have to free the List-memory with the function FreeVec(ProjectList)!
  91. */
  92.  
  93.  
  94. #define  XI_LOCK_PROJECT        2
  95.  
  96. /*      Aktion:         sperrt bestimmtes Projekt für Zugriffe durch XiPaint
  97.                         Locks a specified project.
  98.  
  99.         Parameter:      ProjectName:    Name des zu sperrenden Projekts (XiPaint-Konvention)
  100.                         Name of the project to lock.
  101.  
  102.         Return:         Width:
  103.                         Height:         Größe des Projekts
  104.                         Memory:         Zeiger auf Speicher des Projekts
  105. */
  106.  
  107.  
  108. #define  XI_UNLOCK_PROJECT      3
  109.  
  110. /*      Aktion:         gibt Projekt für XiPaint wieder frei
  111.                         Unlocks the project. Now XiPaint can work...
  112.  
  113.         Parameter:      ProjectName:    Name des freizugebenden Projekts (XiPaint-Konvention)
  114.  
  115.         Return:         keine
  116. */
  117.  
  118.  
  119. #define  XI_NEW_PROJECT         4
  120.  
  121. /*      Aktion:         Öffnen eines neuen Projektes in XiPaint, wird gleichzeitig auch
  122.                         gesperrt, muß daher nach Benutzung mit XI_UNLOCK_PROJECT freigegeben
  123.                         werden
  124.  
  125.                         Opens a new Project in XiPaint and locks it for you to use. After your work
  126.                         you have to unlock it wiht XI_UNLOCK_PROJECT
  127.  
  128.         Parameter:      ProjectName:    Name des neuen Projekts (muß hier Zeiger auf initialisiertes char-Array (String) sein !!!)
  129.                                         WICHTIG: Die ersten 4 Zeichen müssen mit "____" (4 'Underscores') gefüllt sein,
  130.                                                  da XiPaint dort im Puffer eine eindeutige Kennung einsetzt !
  131.                                                  Erfüllt der Name nicht diese Voraussetzung, wird die alte Konvention verwendet
  132.                                                  (Kompatibilität mit alten Programmen, siehe unten).
  133.                                                  Nach dem Reply der Message steht Puffer der neue Name mit Kennung,
  134.                                                  der danach zur Referenz auf das Projekt verwendet werden muß.
  135.                                         Attention: The first 4 charcters have to be filled out as "____", because
  136.                                                    XiPaint fills out a unic number.
  137.                         Width:
  138.                         Height:         gewünschte Größe
  139.  
  140.         Return:         Memory:         Zeiger auf Speicher des Projektes
  141.                         Width:
  142.                         Height:         tatsächliche geöffnete Größe !!!
  143. */
  144.  
  145.  
  146. #define  XI_UPDATE_PROJECT              5
  147.  
  148. /*      Aktion:         zeigt Veränderungen des Projekt-Puffers an
  149.                         sollte nach Veränderungen aufgerufen werden
  150.  
  151.                         Refreshs the picture in XiPaint. Use this after manipulating
  152.                         the memory of a project.
  153.  
  154.         Parameter:      ProjectName:    Name des Projekts (XiPaint-Konvention)
  155.  
  156.         Return:         keine
  157. */
  158.  
  159.  
  160. #define  XI_SCREEN_TO_FRONT             6
  161.  
  162. /*      Aktion:         bringt den Bildschirm von XiPaint nach vorne
  163.  
  164.         Parameter:      keine
  165.  
  166.         Return:         keine
  167. */
  168.  
  169.  
  170. #define  XI_SCREEN_TO_BACK              7
  171.  
  172. /*      Aktion:         bringt den Bildschirm von XiPaint nach hinten
  173.  
  174.         Parameter:      keine
  175.  
  176.         Return:         keine
  177. */
  178.  
  179. #define  XI_NEW_BRUSH         8
  180.  
  181. /*      Aktion:         Holt Speicher für einen Brush. Dieser kann dann beschrieben werden.
  182.                         Um den Brush dann dem System bekanntzugeben, muß noch
  183.                         XI_UPDATE_BRUSH aufgerufen werden.
  184.  
  185.                         Gets the memory for an XiPaint-Brush. To activate the
  186.                         Brush in XiPaint, call XI_UPDATE_BRUSH.
  187.  
  188.         Parameter:
  189.                         Width:
  190.                         Height:         gewünschte Größe
  191.  
  192.         Return:         Memory:         Zeiger auf Speicher des Projektes  (oder NULL)
  193.                         Width:
  194.                         Height:         tatsächliche geöffnete Größe !!!
  195. */
  196.  
  197. #define  XI_UPDATE_BRUSH      9
  198.  
  199. /*      Aktion:         Fügt den Brush in die Brush-Queue ein und macht ein Update.
  200.                         Puts the manipulated brush in the XiPaint brush-queue.
  201.  
  202.         Parameter:      Memory: Speicher des Brushs.
  203.                         Width:
  204.                         Height:         Größe
  205.  
  206.         Return:         Keine
  207. */
  208.  
  209. #define  XI_SET_PICINFO      10
  210.  
  211. /*      Aktion:         Setzt zum zugehoerigen Projekt xdpi, ydpi und den Author
  212.  
  213.                         Sets xdpi and ydpi of the specified Project
  214.  
  215.         Parameter:      ProjectName:    Name of the Projekts (XiPaint-Konvention)
  216.                         Memory:         0-Terminated String des Authors
  217.                         Width:          xdpi
  218.                         Height:         ydpi
  219.  
  220.         Return:         Keine
  221. */
  222.  
  223. #define  XI_GET_BRUSH        11
  224.  
  225. /*      Action:         Gets the memory, width & height of the current brush
  226.  
  227.         Parameter:      none
  228.  
  229.         Return:         Memory: Pointer to the brush-memory
  230.                         Width:  of the brush
  231.                         Height: of the brush
  232. */
  233.  
  234. #define  XI_PUT_ERROR        12
  235.  
  236. /*      Action:         Pops up an Error-Message in XiPaint
  237.  
  238.         Parameter:      Memory: 0-Terminated String with your Message
  239.  
  240.         Return:         nothing
  241. */
  242.  
  243. #define  XI_OPEN_GAUGE       13
  244.  
  245. /*      Action:         opens up a gauge
  246.  
  247.         Parameter:      Memory: 0-Terminated String to the Title
  248.  
  249.         Return:         Memory:  Pointer to the box of the gauge
  250. */
  251.  
  252. #define  XI_MOVE_GAUGE       14
  253.  
  254. /*      Action:         Moves the gauge. 100 terminates the gauge.
  255.  
  256.         Parameter:      Memory: Pointer to the box of the gauge
  257.                         Width: Value between 0 - 100
  258.  
  259.         Return:         nothing
  260. */
  261.  
  262. #define  XI_GET_PALETTE      15
  263.  
  264. /*      Action:         Gives the pointer of a 256 Items Entry RGBA Color Palette
  265.  
  266.         Parameter:      none
  267.  
  268.         Return:         Memory: Pointer of a union color Array like:
  269.                         union color{
  270.                              LONG c24;
  271.                              UBYTE c8[4];
  272.                              };
  273.                         #define RED 0
  274.                         #define GRN 1
  275.                         #define BLU 2
  276.                         #define KEY 3
  277. */
  278. #define  XI_UPDATE_PALETTE    16
  279.  
  280. /*      Action:         Updates alle dependices to the palette
  281.  
  282.         Parameter:      none
  283.  
  284.         Return:         nothing
  285. */
  286.  
  287. #define  XI_MOVE_PIC          17
  288.  
  289. /*      Action:         XiPaint copies the memory-block for further action
  290.                         E.g.: Minipic etc.
  291.                         This function returns after doing something with this
  292.                         memory.
  293.                         The application has to free this memory by itself.
  294.                         The memory has to be RGBK-organised, like the Projects.
  295.  
  296.         Parameter:      Memory-Pointer, Width, Height, ID
  297.                         char *ProjectName   ... ID-String (from Request)
  298.                         SHORT Width, Height ... Memorysize
  299.                         UBYTE *Memory;      ... Memory
  300.  
  301.         Return:         nothing
  302. */
  303.  
  304. /*
  305.    !!!  HINWEIS  !!!
  306.  
  307.    Die Projektnamen in XiPaint folgen von nun an der Konvention  "XXX_BildName", wobei XXX für eine
  308.    dreistellige von XiPaint erzeugte Kennung steht, mit der das Bild auch bei gleichen Namen
  309.    von mehreren Projekten unterschieden werden kann. Wird ein "alter" Name ohne die Kennung am
  310.    Anfang verwendet, sucht XiPaint das Projekt nach dem alten Verfahren, das aber nicht eindeutig ist.
  311.    Daher sind beim Erzeugen eines neuen Projekts mit XI_NEW_PROJECT die 4 Underscores am Anfang des
  312.    Namens notwendig, um XiPaint anzuzeigen daß die neue Konvention verwendet werden kann. Anstelle
  313.    der Underscores füllt XiPaint die aktuelle Kennung ein. Werden keine Underscores angegeben, so erfolgt
  314.    die Öfnnung und der Zugriff auf dieses Projekt nach dem alten Modus, bei dem die Eindeutigkeit des Zugriffs
  315.    nicht gegeben ist und es so zu Problemen kommen kann. Neue Programme sollten auf jeden Fall NUR die neue
  316.    Methode verwenden.
  317. */
  318.  
  319.  
  320.  
  321. /* //////////////     E N D E     öffentliches XiUser.h      ////////////// */
  322.  
  323.  
  324. /****  Strukturen und Defines für Studio-Anbindung  ****/
  325.  
  326. #define STUDIO_SERVER   1       /* version of server message structure */
  327.  
  328. /* definitions for "command"   */
  329. #define STUDIO_PRINT  0x01      /* Print pic file or picture in memory                          */
  330. #define STUDIO_QUIT       0x02  /* Quit Studio after all commands are performed. This command may
  331.                                    be combined with STUDIO_PRINT Even if issueing the QUIT command,
  332.                                    the server port remains as long as a print task is running. You
  333.                                    can issue any print command as long as the port is running and
  334.                                    thus disable the previous QUIT command if wanted                   */
  335.  
  336. /* definitions for "perform" */
  337. #define STUDIO_DELETE   0x01    /* Set if you want to automatic delete file after printing This
  338.                                    flag is only of use if prtfile[0] <> 0! This flag has no meaning
  339.                                    when printing from memory. If you want to free the image memory,
  340.                                    append the image memory to the message and do not define a
  341.                                    replyport. As the server calls FreeVec on any print command
  342.                                    message not having a replyport after printing, the image memory
  343.                                    is freed with the message                                              */
  344.  
  345. #define STUDIO_NOREQ    0x02    /* Set if you don't want Studio error requesters to popup       */
  346.  /* Warning: in some real bad cases requesters still may popup   */
  347.  /* NOT SUPPORTED YET!                                           */
  348.  
  349. #define STUDIO_NOWINDOW 0x04    /* No print status window will be opened by Studio.             */
  350.  /* NOT SUPPORTED YET!                                           */
  351. #define STUDIO_NOASYNC  0x08    /* Set if you don't want to print in background. This flag must
  352.                                    only be set if a message replyport was set in the message body.                                     */
  353. #define STUDIO_NOSETUP  0x10    /* If set, no window will appear to the user allowing him to define
  354.                                    the usual server print parameters. Do not use this setting
  355.                                    unless you don't run under Intuition */
  356. #define STUDIO_PARAM    0x20    /* If set, you can define some global Studio parameters. This flag
  357.                                    should be used if STUDIO_NOSETUP or STUDIO_NOWINDOW is defined */
  358.  
  359.  
  360. struct ServerMsg
  361.   {
  362.     struct Message message;     /* message body - if no replyport is given, FreeVec will be called
  363.                                    on message pointer by Studio after processing                                           */
  364.     ULONG version;              /* version of struct StudioMsg alias STUDIO_SERVER      */
  365.     UBYTE servername[36];       /* Server name - Length limited to 35 CHARS!            */
  366.     ULONG command;              /* MAIN command to perform - definitions see above      */
  367.  
  368. /* If STUDIO_PRINT is set in "command", fill in necessary print infos below     */
  369.  
  370.     ULONG perform;              /* Attributes for "command" - flags see above           */
  371.     UBYTE prtfile[512];         /* file to print -  or prtfile[0]=0 if memory is passed */
  372.     UWORD err;                  /* if not 0 an error has occured while printing: 1 = fatal error 2
  373.                                    = job was canceled - maybe because of error... however user was
  374.                                    informed unless STUDIO_NOREQ was defined 3 = User intentionaly
  375.                                    canceled your job - can't make up his mind! */
  376.     UBYTE errormsg[256];        /* returns EasyRequest message text with exact cause of possible
  377.                                    Studio failure. Note: Text may contain several lines devided by
  378.                                    \n. The errormsg was allready shown by Studio unless
  379.                                    STUDIO_NOREQ was defined. If STUDIO_NOREQ was defined, make sure
  380.                                    that errortext is shown (only if errormsg[0] <> 0 && err==1) */
  381.     UBYTE xAspect;              /* Aspect of picture - is used by Studio to automaticly determine
  382.                                    height of printout.        */
  383.     UBYTE yAspect;              /* Aspect should only be supplied if printing from memory Aspect is
  384.                                    overriden by dpi below                                                          */
  385.     UWORD dpi_x;                /* Density of picture - is used by Studio to automaticly determine
  386.                                    height of printout.       */
  387.     UWORD dpi_y;                /* Should only be supplied if printing from memory                                           */
  388.  
  389.     /* These are some controls over basic functions of Studio and should be setable in the
  390.        application program if STUDIO_NOSETUP is used. Note: the paramters are only accessable if
  391.        STUDIO_PARAM is set                 */
  392.  
  393.     WORD red;                   /* global red adjustment. Range -50 (dark) up to 50 (bright) */
  394.     WORD green;                 /* global green adjustment. Range -50 up to 50             */
  395.     WORD blue;                  /* global blue adjustment. Range -50 up to 50              */
  396.     WORD brightness;            /* global brightness adjustment. Range -50 up to 50        */
  397.     WORD contrast;              /* global brightness adjustment. Range -50 up to 50        */
  398.     WORD gamma;                 /* global gamma adjustment. Range -50 up to 50             */
  399.     UWORD copies;               /* number of copies to print                               */
  400.     UWORD landscape;            /* 0=portrait  1=landscape - rotation is handled by Studio */
  401.  
  402.     /* if prtfile == NULL these settings define the picture in memory to print */
  403.  
  404.     UBYTE *redsource;           /* ptr to first ubyte red|greyscale source row */
  405.     UBYTE *greensource;         /* ptr to first ubyte green source row - or NULL if greyscale */
  406.     UBYTE *bluesource;          /* ptr to first ubyte blue source row  - or NULL if greyscale */
  407.     LONG redinc;                /* number that must be added to redsource address to get to next
  408.                                    pixel in row */
  409.     LONG greeninc;              /* number that must be added to greensource address to get to next
  410.                                    pixel in row */
  411.     LONG blueinc;               /* number that must be added to bluesource address to get to next
  412.                                    pixel in row */
  413.     LONG redmod;                /* number that must be added to redsource address to get to next
  414.                                    row */
  415.     LONG greenmod;              /* number that must be added to greensource address to get to next
  416.                                    row */
  417.     LONG bluemod;               /* number that must be added to bluesource address to get to next
  418.                                    row */
  419.     UWORD width;                /* image width if image is passed through memory */
  420.     UWORD height;               /* image height if image is passed through memory */
  421.   };
  422.  
  423.  
  424.  
  425. /****  öffentliche Funktionen  ****/
  426.  
  427. void HandleUserMessage(struct Display *Display, void *UserMessage);
  428.  
  429. SHORT PrintProject(struct Box *Project, BOOL Async);
  430. SHORT PrintBrush(struct Display *Display, struct brush *mybrush);
  431. void PrintTP(struct Box *box);
  432. void PrintBrushTP(struct Display *Display, struct brush *mybrush);
  433.